#include "pilha_estatica.h"

struct pilha {
	int no[MAX];
	int topo;
};

Pilha cria_pilha()
{
	Pilha p;
	p = (Pilha) malloc(sizeof(struct pilha));

	if(p != NULL)
		p->topo = -1;
	return p;
}

int pilha_vazia(Pilha p)
{
	if(p->topo == -1)
		return 1;
	else
		return 0;
}

int pilha_cheia(Pilha p)
{
	if(p->topo == MAX-1)
		return 1;
	else
		return 0;
}

int push(Pilha p, int elem)
{
	if(p == NULL || pilha_cheia(p))
		return 0;

	/* Insere o elemeento */
	p->topo++;
	p->no[p->topo] = elem;
	return 1;
}

int pop(Pilha p, int *elem)
{
	if(p == NULL || pilha_vazia(p))
		return 0;

	*elem = p->no[p->topo]; // Retorna o elemento
	p->topo--; //Remove o elemento do topo

	return 1;
}

int le_topo(Pilha p, int *elem)
{
	if(p == NULL || pilha_vazia(p))
		return 0;

	*elem = p->no[p->topo];
	return 1;
}

int imprime_lista(Pilha p)
{
	for(i = p->topo;i != -1;i--)
		printf("%d ", p->no[i]);

	return 1;
}
